<?php
/**
 * classe SqlUpdate
 * Esta classe provê meios para manipulação de uma instrução de UPDATE no banco de dados
 */
final class SqlEditar extends SqlInstrucao
{
    /**
     * Atribui valores à determinadas colunas no banco de dados que serão modificadas
     *
     * @param string $coluna coluna da tabela
     * @param string $valor valor a ser armazenado
     */
    public function setCampo($coluna, $valor)
    {
        // verifica se é um dado escalar (string, inteiro,...)
        if ( is_scalar($valor) )
        {
            if ( is_string($valor) and (!empty($valor)) )
            {
                // caso seja uma string
                $valor = addslashes($valor);
                $valor = str_replace("'", "''", $valor);
                
                $this->colunaValores[$coluna] = "'$valor'";
            }
            else if ( is_bool($valor) )
            {
                // caso seja um boolean
                $this->colunaValores[$coluna] = $valor ? 'TRUE': 'FALSE';
            }
            else if ($valor !== '')
            {
                // caso seja outro tipo de dado
                $this->colunaValores[$coluna] = $valor;
            }
            else
            {
                // caso seja NULL
                $this->colunaValores[$coluna] = "NULL";
            }
        }
    }

    /**
     * retorna a instrução de UPDATE em forma de string.
     *
     * @return string
     */
    public function getInstrucao()
    {
        // monsta a string de UPDATE
        $this->sql = "UPDATE {$this->tabela}";
        // monta os pares: coluna=valor,...
        if ( $this->colunaValores )
        {
            foreach ( $this->colunaValores as $coluna => $valor )
            {
                $set[] = "{$coluna} = {$valor}";
            }
        }
        $this->sql .= ' SET ' . implode(', ', $set);

        // retorna a cláusula WHERE do objeto $this->criteria
        if ($this->criterio)
        {
            $this->sql .= ' WHERE ' . $this->criterio->dump();
        }
        return $this->sql . ';';
    }
}
?>